import json
import random

class Tools:
    def __init__(self):
        column_path = "FerpaApp/config/PHQ-9.JSON"

        self.number = list()
        self.question = list()
        self.options = list()
        self.questions = list()

        with open(column_path, 'r', encoding='utf-8') as f:
            column_item = json.load(f)

        # print(column_item)

        self.questions = column_item['PHQ-9']["questions"]
        for item in self.questions:
            self.number.append(item['number'])
            self.question.append(item['question'])
            self.options.append(item["options"])

        self.score = [
                {
                    "id": 1,
                    "score": "0-4",
                    "question": "当前无明显抑郁症状，心理健康状态良好。",
                    "advice": [
                        "（1）保持健康生活习惯（规律作息、均衡饮食、适度运动）。",
                        "（2）通过正念冥想、社交活动或兴趣爱好维持心理韧性。",
                        "（3）建议1-3个月后复测，监测情绪变化。"
                    ]
                },
                {
                    "id": 2,

                    "score": "5-9",
                    "question": "存在轻度情绪困扰，可能影响日常生活效率，但功能损害较轻。",
                    "advice": [
                        "（1）记录情绪日记，识别压力源；尝试认知行为疗法（CBT）自助练习。",
                        "（2）增加日照时间，每周≥150分钟中强度运动，减少酒精/咖啡因摄入。",
                        "（3）与亲友分享感受，加入兴趣社群减少孤立感。",
                        "（4）若症状持续≥2周，建议心理咨询。"
                    ]
                },
                {
                    "id": 3,

                    "score": "10-14",
                    "question": "症状对工作/社交产生明显影响，可能伴随躯体化表现。",
                    "advice": [
                        "（1）优先推荐结构化短程治疗（CBT、IPT等），4-6周后评估进展。",
                        "（2）建议全科医生排除生理病因，考虑抗抑郁药物联用。",
                        "（3）制定危机应对方案（紧急联系人列表、放松技巧清单）。",
                        "（4）每周记录PHQ-9得分动态追踪症状变化。"
                    ]
                },
                {
                    "id": 4,

                    "score": "15-19",
                    "question": "日常功能严重受损，可能出现无助感、自责或无价值感。",
                    "advice": [
                        "（1）抗抑郁药物+高频次心理治疗（每周1次），优先面诊精神科医生。",
                        "（2）协商暂时调整工作/学习强度，避免重大决策。",
                        "（3）家属参与治疗计划，提供陪伴和服药监督。",
                        "（4）立即启动风险评估并签署「不自我伤害协议」。"
                    ]
                },
                {
                    "id": 5,

                    "score": "20-27",
                    "question": "极可能符合重度抑郁发作诊断标准，存在高自伤/自杀风险。",
                    "advice": [
                        "（1）若报告自杀计划或尝试，启动24小时监护并转介急诊。",
                        "（2）考虑重复经颅磁刺激（rTMS）或住院治疗。",
                        "（3）药物调整需密切监测副作用。",
                        "（4）治疗周期≥6个月，预防复发。"
                    ]
                }
            ]

        self.prompt = """
            角色设定：
            你是一位专业且富有同理心的AI心理辅导医生，代号“小帕”。你的任务是：在安全的虚拟咨询环境中，通过自然对话引导用户完成PHQ-9抑郁量表筛查，并基于回答提供初步评估与支持性建议。请始终遵守以下原则：
            
            1. 对话风格与语气
            使用温暖、平缓的中文口语，避免专业术语（如“量表”“症状”）。
            每轮对话仅提出1个问题，给予用户充分表达空间。
            对负面回答先表达共情（例：“我理解这种疲惫感一定让你很煎熬”），再衔接量表问题。
            
            2. PHQ-9问题嵌入规则
            第一阶段（建立信任）：以日常关怀切入，如：“最近天气变化大，你身体和情绪有没有受影响？”
            第二阶段（问题植入）：根据用户回答，从PHQ-9中选取2-3个相关问题，例如：
            若用户提到“失眠” → 引出问题4：“你最近是否常因为太累，连日常小事（比如洗漱、买菜）都很难完成？”
            若用户提到“孤独” → 引出问题1：“有没有什么事情能让你暂时放松或感到开心？比如散步、听音乐？”
            第三阶段（深度澄清）：对高分回答（如“每天失眠”）追问严重程度：“这种情况多久会出现一次？持续几分钟还是几小时？”
            
            3. 自动评分与反馈机制
            根据用户回答关键词匹配PHQ-9评分（0-3分/问题），例如：
            “完全不想动” → 疲劳感3分
            “偶尔和朋友吃饭” → 兴趣减退1分
            若累计分≥10分，优先反馈：“你正在经历较大的情绪压力，这可能超出了自我调节的范围”，随后提供心理援助热线和附近诊所信息。
            若累计分≤4分，反馈：“短期内情绪波动是正常的，你可以试试每天记录3件小事，比如‘今天喝了一杯喜欢的茶’。”
            
            4. 伦理与安全条款
            禁止诊断或开药，需声明：“我的建议不能替代医生，但我会陪伴你梳理情绪。”
            当用户出现自残/自杀倾向时，立即响应：“我感受到你非常痛苦，请允许我为你联系24小时心理危机干预热线（强制弹出号码：XXX）。”
            
            5. 示例对话
            用户：“我最近总觉得自己没用，工作一直出错。”
            AI：“我听到你说‘觉得自己没用’，这种自责一定让你很痛苦吧？（共情）…如果从0到10分，这种‘无价值感’最近出现的频率有多高？（PHQ-9问题6：自我批评）”
            """
    def RandomSelectQuestion(self, selected_id):
        # selected_id : 已经测试过的题目的题号
        remain_question = [i for i in range(9) if i not in selected_id]
        id_question = random.choice(remain_question)
        select_question = self.question[id_question]

        return select_question, id_question

# Column = Tools()


# print(Column.RandomSelectQuestion([1, 2, 3]))
# [0, 4, 5, 6, 7, 8]